export default {
  // 组件数据定义
  data() {
    // 用户名验证规则
    let validateUsername = (rule, value, callback) => {
      if (value === "") {
        return callback(new Error("请输入用户名"));
      } else if (!/^[a-zA-Z0-9_]{4,16}$/.test(value)) {
        return callback(new Error("用户名必须为4-16位字母、数字或下划线"));
      }
      return callback();
    };
    
    // 密码验证规则
    let validatePassword = (rule, value, callback) => {
      if (value === "") {
        return callback(new Error("请输入密码"));
      // } else if (!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/.test(value)) {
      //   return callback(new Error("密码需8-16位，包含大小写字母和数字"));
      }
      return callback();
    };
    
    return {
      systemName: this.yzy.systemName, // 系统名称(从全局配置获取)
      loading: false,                 // 加载状态
      formData: {                     // 表单数据
        username: '',                 // 用户名
        password: ''                  // 密码
      },
      rules: {                        // 验证规则配置
        username: [{ validator: validateUsername, trigger: "blur" }],
        password: [{ validator: validatePassword, trigger: "blur" }],
      },
    }
  },

  // 组件方法
  methods: {
    // 表单提交方法
    submitForm() {
      // 执行表单验证
      this.$refs.loginForm.validate(valid => {
        if (!valid) return; // 验证不通过则直接返回

        this.loading = true // 显示加载状态
        let pwd = this.yzy.encrypt(this.formData.password) // 密码加密
        
        // 发送登录请求
        this.yzy.http('user/login', 'POST', {
          username: this.formData.username,
          password: pwd
        }, (res) => {
          this.loading = false // 关闭加载状态
          
          // 根据返回码处理结果
          if (res.code == 1) {
            this.handleLoginSuccess(res); // 登录成功处理
          } else {
            this.handleLoginFailure(res.msg); // 登录失败处理
          }
        })
      })
    },

    // 登录成功处理
    handleLoginSuccess(res) {
      // 显示成功提示
      this.$message({ type: 'success', message: res.msg });
      
      // 存储会话数据
      sessionStorage.setItem('token', res.token); // 存储token
      sessionStorage.setItem('uid', res.data.pk_id); // 存储用户ID
      sessionStorage.setItem('dtype', res.data.dtype) // 存储用户类型
      sessionStorage.setItem('username', res.data.username); // 存储用户名
      sessionStorage.setItem('userInfo', JSON.stringify(res.data)); // 存储用户信息
      sessionStorage.setItem('loginTime', Date.now());              // 存储登录时间戳

      // 跳转至首页
      this.$router.push({ path: '/' });
    },

    // 登录失败处理
    handleLoginFailure(msg) {
      // 清除所有会话存储
      const SESSION_KEYS = ['token', 'uid', 'userInfo', 'username', 'pwd', 'dtype', 'a_id'];
      SESSION_KEYS.forEach(key => sessionStorage.removeItem(key));
      
      // 显示错误提示
      this.$message({ type: 'error', message: msg || '登录失败，请重试' });
    }
  }
}